# system 角色案例（设定模型长期行为）
"""
作用：
    SystemMessage 先规定身份 → “中西文化起名大师 + 简洁诗意”
    后续所有 HumanMessage 问题都会受这个全局规则影响。
"""
from fastapi import FastAPI
from fastapi import APIRouter, Query
from langchain.schema import HumanMessage, SystemMessage
from langchain_community.llms import Ollama
from langchain.prompts import PromptTemplate

"""
作用：
    SystemMessage 先规定身份 → “中西文化起名大师 + 简洁诗意”
    后续所有 HumanMessage 问题都会受这个全局规则影响。
"""
router = APIRouter()

ollama = Ollama(base_url='http://172.16.21.38:11436', model="qwen3:0.6b")
@router.get("/system_role")
async def system_role():
    messages = [
        SystemMessage(content="你是一位精通中西文化的起名大师，回答必须简洁、富有诗意。"),
        HumanMessage(content="请给我三个具有日本风格的女孩名字")
    ]
    response = ollama.invoke(messages)
    return {"role": "system_demo", "response": response}

"""
1. 在 SystemMessage 中直接嵌入模板要求-比如，你想让它的结果固定成 JSON 或某种表格格式，可以这样：
"""
@router.get("/system_role_template")
async def system_role_template():
    messages = [
        SystemMessage(content="""
你是一位精通中西文化的起名大师，回答必须简洁、富有诗意。
无论用户提什么要求，都必须严格按照以下 JSON 模板输出：
{
    "names": [
        {"gender": "女", "name": "<名字1>"},
        {"gender": "女", "name": "<名字2>"},
        {"gender": "女", "name": "<名字3>"}
    ]
}
不要返回额外的解释或多余内容。
"""),
        HumanMessage(content="请给我三个具有日本风格的女孩名字")
    ]
    response = ollama.invoke(messages)
    return {"role": "system_demo", "response": response}


"""
2. 使用 LangChain 的 PromptTemplate 生成模板字符串
    如果你想让模板内容更动态（变量替换），可以用 PromptTemplate：
"""
template = PromptTemplate.from_template("""
你是一位精通中西文化的起名大师。
请按照以下格式返回三个具有{style}风格的{gender}名字：不要多说其他任何废话直接的返回结果
{{
    "names": [
        {{"gender": "{gender}", "name": "<名字1>"}},
        {{"gender": "{gender}", "name": "<名字2>"}},
        {{"gender": "{gender}", "name": "<名字3>"}}
    ]
}}
不要返回其他内容。
""")

@router.get("/system_role_template2")
async def system_role_template2(style: str = "日本", gender: str = "女孩"):
    prompt_str = template.format(style=style, gender=gender)
    messages = [
        SystemMessage(content=prompt_str),
        HumanMessage(content=f"请给我三个具有{style}风格的{gender}名字")
    ]
    response = ollama.invoke(messages)
    return {"role": "system_demo", "response": response}